package com.ruoyi.xuexiao.controller;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.xuexiao.domain.param.KsFileDtoParam;
import com.ruoyi.xuexiao.domain.param.KsFileRequestParam;
import com.ruoyi.xuexiao.domain.vo.KsFileReturnVo;
import com.ruoyi.xuexiao.service.FileDiskService;
import com.ruoyi.xuexiao.service.KsFileService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;


/**
 * 矿山文件
 *
 * @author 郭梓强
 * @since 2024年5月28日09:01:03
 */
@RestController
@AllArgsConstructor
public class KsFileController {

    private final KsFileService ksFileService;

    private final FileDiskService fileDiskService;

    /**
     * 获取矿山文件
     *
     * @author 郭梓强
     * @since 2024年5月28日09:01:03
     */
    @ApiOperation("获取矿山文件")
    @GetMapping("/jgKsFile/selInformation")
    @ApiResponse(code = 200, message = "获取矿山文件", response = KsFileReturnVo.class)
    public R<List<KsFileReturnVo>> selInformation(KsFileRequestParam ksFileRequestParam)
    {
        return R.ok(ksFileService.selJgKsFile(ksFileRequestParam));
    }


    /**
     * 上传矿山文件
     *
     * @author 郭梓强
     * @since 2024年5月28日09:02:33
     */
    @ApiOperation("上传矿山文件")
    @PostMapping("/jgKsFile/jgUploadFile")
    @ApiResponse(code = 200, message = "新设-上传矿山文件", response = KsFileDtoParam.class)
    public R<KsFileDtoParam> jgUploadFile(KsFileDtoParam ksFileDtoParam, HttpServletRequest request) throws IOException
    {
        return R.ok(ksFileService.jgUploadFile(ksFileDtoParam,request));
    }


    /**
     * 删除-矿山上传
     *
     * @author 郭梓强
     * @since 2024年5月28日09:02:43
     */
    @ApiOperation("删除-矿山上传")
    @GetMapping("/jgKsFile/delJdKsFile")
    public AjaxResult delJdKsFile(Integer id)
    {
        return AjaxResult.success(ksFileService.delJdKsFile(id));
    }



    /**
     * 静态规则图片获取
     *
     * @author 郭梓强
     * @since 2024年5月30日11:25:43
     */
    @ApiOperation("静态规则图片获取")
    @GetMapping("/static")
    public byte[] getStaticFile(String fileName) throws IOException {
        return ksFileService.getStaticFile(fileName);
    }



    /**
     * 获取文件树
     *
     * @author 郭伟明
     * @since 2024年5月28日09:02:43
     */
    @ApiOperation("获取文件树下一层")
    @GetMapping("/fetchDirectoryTree")
    @ApiImplicitParam(name = "folderName", value = "文件夹名称", required = true, dataType = "String", paramType = "query")
    public R fetchDirectoryTree(@RequestParam(required = false) String folderName, @RequestParam(required = false) String filter){

        return R.ok(fileDiskService.getFileStructure(folderName, filter));
    }


    /**
     * 获取文件树
     *
     * @author 郭伟明
     * @since 2024年5月28日09:02:43
     */
    @ApiOperation("获取文件树上一层")
    @GetMapping("/fileStructureParent")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "folderName", value = "文件夹名称", required = true, dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "rootFolderPath", value = "根文件夹路径", required = true, dataType = "String", paramType = "query")
    })
    public R getFileStructureParent(@RequestParam String folderName,String rootFolderPath)
    {
        return R.ok(fileDiskService.getFileStructureParent(folderName,rootFolderPath));
    }


}

